﻿Imports ComponentFactory.Krypton.Toolkit
Imports System.Data.OleDb
Imports WiseLibraries.Net
Imports WiseLibraries.Strings
Imports System.Text

Public Class CadastroProduto
    Inherits KryptonForm

    Private conexao As OleDbConnection
    Private command As OleDbCommand
    Private dataSet As DataSet
    Private dataview As DataView
    Private dataAdapter As OleDbDataAdapter
    Private cmdBuilder As OleDbCommandBuilder
    Private produto As Integer ' variavel do codigo do produto para o modo editar
    Private strsalvar As String
    Private tipocadastro As String



#Region "Atributos"
    Private nome As String = Nothing
    Private descricao As String = Nothing
    Private marca As Integer = Nothing
    Private lote As String = Nothing
    Private valor As Decimal = Nothing
    Private quantEmbalagem As Integer = Nothing
    Private estoque As Integer = Nothing
    Private fornecedor As Integer = Nothing
    Private preco As Double = Nothing
#End Region

    Sub New()

        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.

        conexao = FabricaDeConexoes.CriarConexao()

        carregarMarcas()
        carregarFornecedor()
        tipocadastro = "novo"

    End Sub

    Sub New(ByVal produto As Integer)

        ' This call is required by the Windows Form Designer.
        InitializeComponent()
        ' Add any initialization after the InitializeComponent() call.
        tipocadastro = "editar"
        Me.produto = produto
        Me.carregarFornecedor()
        Me.carregarMarcas()


        conexao = FabricaDeConexoes.CriarConexao()
        conexao.Open()
        command = New OleDbCommand("SELECT tblProduto.*, tblFornecedor.nomeFornecedor FROM tblProduto INNER JOIN tblFornecedor ON tblProduto.codFornecedor = tblFornecedor.codFornecedor WHERE codProduto = " & produto, conexao)
        Dim dr As OleDbDataReader = command.ExecuteReader()


        dr.Read()



        If (dr("codProduto") = produto) Then


            txtnome.Text = dr("nomeProduto")
            txtdescricao.Text = If(dr("descricaoProduto").Equals(DBNull.Value), Nothing, dr("descricaoProduto"))
            txtpreco.Text = If(dr("precoProduto").Equals(DBNull.Value), Nothing, dr("precoProduto"))
            txtlote.Text = If(dr("loteProduto").Equals(DBNull.Value), Nothing, dr("loteProduto"))
            txtestoque.Text = If(dr("quantidadedeestoqueProduto").Equals(DBNull.Value), Nothing, dr("quantidadedeestoqueProduto"))
            txtqtdeembalagem.Text = If(dr("quantidadeProduto").Equals(DBNull.Value), Nothing, dr("quantidadeProduto"))
            '  cbfornecedor.SelectedIndex = dr("codFornecedor")
            'cbmarca.SelectedIndex = dr("codmarcaProduto")
        End If

        conexao.Close()

    End Sub

    Private Sub carregarFornecedor()
        
        Try
            Dim strfornecedor As String = "SELECT * FROM tblFornecedor"
            conexao = FabricaDeConexoes.CriarConexao()
            command = New OleDbCommand(strfornecedor, conexao)
            dataAdapter = New OleDbDataAdapter(command)
            dataSet = New DataSet()
            dataAdapter.Fill(dataSet, "tblFornecedor")


            cbfornecedor.DataSource = dataSet.Tables("tblFornecedor")
            cbfornecedor.DisplayMember = "nomeFornecedor"
            cbfornecedor.ValueMember = "codFornecedor"

        Catch ex As Exception
            Debug.WriteLine(ex)
        End Try
        


    End Sub
    Private Sub carregarMarcas()
        Try
            Dim strmarca As String = "SELECT * FROM tblMarcaProduto"
            conexao = FabricaDeConexoes.CriarConexao()
            command = New OleDbCommand(strmarca, conexao)
            dataAdapter = New OleDbDataAdapter(command)
            dataSet = New DataSet()
            dataAdapter.Fill(dataSet, "tblMarcaProduto")
            cbmarca.DataSource = dataSet.Tables("tblMarcaProduto")
            cbmarca.DisplayMember = "descricaomarcaProduto"
            cbmarca.ValueMember = "codMarcaProduto"
        Catch ex As Exception
            Debug.WriteLine("Erro: " & ex.Message)
        Finally
            conexao.Close()
            command.Dispose()
            dataAdapter.Dispose()
        End Try

    End Sub

    Private Sub btnAddMarca_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddMarca.Click
        conexao.Open()
        Dim frm As New EditorDeTabelaSimples("Adicionar ou remover Marcas", conexao, "tblMarcaProduto", "descricaoMarcaProduto")
        frm.ShowDialog()

        cbmarca.DataBindings.Clear()
        cbmarca.DataSource = Nothing
        cbmarca.Refresh()

        carregarMarcas()

        conexao.Close()
    End Sub

    Private Sub btnAddFornecedor_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnAddFornecedor.Click
        Try
            Dim frm As New CadastroFornecedor
            frm.ShowDialog()

        Catch ex As Exception
            Debug.WriteLine(ex)
        End Try
    End Sub

    Private Sub btnLimpar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLimpar.Click
        Assistente.limparCampos(Me)
    End Sub

    Private Sub btnCancelar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnCancelar.Click
        Me.Dispose()
    End Sub

    Private Sub btnSalvar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSalvar.Click
        If (tipocadastro = "novo") Then
            If (validarProduto()) Then
                cadastrarProduto()
                KryptonMessageBox.Show("Produto cadastrado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.Dispose()
            End If

        ElseIf (tipocadastro = "editar") Then
            If (validarProduto()) Then
                AtualizarProduto()
                KryptonMessageBox.Show("Produto atualizado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Me.Dispose()

            End If

        End If


    End Sub

    Private Function validarProduto() As Boolean
        Dim val As New RegexValidator()
        If Not (String.IsNullOrEmpty(txtnome.Text)) Then
            nome = txtnome.Text
        Else
            KryptonMessageBox.Show("Há um erro no nome.", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txtnome.Focus()
            Return (False)
        End If

        If Not (String.IsNullOrEmpty(txtdescricao.Text)) Then
            descricao = txtdescricao.Text
        Else
            KryptonMessageBox.Show("Há um erro na Descrição", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txtdescricao.Focus()
            Return (False)
        End If

        If Not (String.IsNullOrEmpty(cbmarca.Text)) Then
            marca = DirectCast(cbmarca.SelectedItem, DataRowView).Item("codMarcaProduto")
        Else
            KryptonMessageBox.Show("Há um erro na Marca", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            cbmarca.Focus()
        End If

        If Not (String.IsNullOrEmpty(cbfornecedor.Text)) Then
            fornecedor = DirectCast(cbfornecedor.SelectedItem, DataRowView).Item("codFornecedor")

        Else
            KryptonMessageBox.Show("Há um erro no Fornecedor", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            cbfornecedor.Focus()

        End If

        If Not (String.IsNullOrEmpty(txtlote.Text)) Then
            lote = txtlote.Text

        Else
            KryptonMessageBox.Show("Há um erro no Lote", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txtlote.Focus()
            Return (False)
        End If

        If Not (String.IsNullOrEmpty(txtpreco.Text)) Then
            preco = txtpreco.Text
        Else
            KryptonMessageBox.Show("Há um erro no Preço", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txtpreco.Focus()
            Return (False)
        End If

        If Not (String.IsNullOrEmpty(txtqtdeembalagem.Text)) Then
            quantEmbalagem = txtqtdeembalagem.Text
        Else
            KryptonMessageBox.Show("Há um erro na Quantidade", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txtqtdeembalagem.Focus()
            Return (False)
        End If

        If Not (String.IsNullOrEmpty(txtestoque.Text)) Then
            estoque = txtestoque.Text
        Else
            KryptonMessageBox.Show("Há um erro na quantidade de estoque", "Atenção", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txtestoque.Focus()
            Return (False)
        End If
        Return (True)

    End Function

    Private Sub cadastrarProduto()

        If (validarProduto() = True) Then

            Dim sql As String = "INSERT INTO tblProduto(nomeProduto,codmarcaProduto,loteProduto, descricaoProduto, precoProduto, quantidadeProduto,codFornecedor, quantidadedeestoqueProduto) VALUES('" & _
            nome & "','" & _
            marca & "','" & _
            lote & "','" & _
            descricao & "','" & _
            preco & "','" & _
            quantEmbalagem & "','" & _
            fornecedor & "','" & _
            estoque & "')"

            Try
                conexao.Open()
                command = New OleDbCommand(sql, conexao)
                command.ExecuteNonQuery()
                KryptonMessageBox.Show("Produto cadastrado com sucesso!", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Assistente.limparCampos(Me)
            Catch ex As Exception
                Debug.WriteLine(ex.Message)
                KryptonMessageBox.Show("Produto nao cadastrado !", "Aviso", MessageBoxButtons.OK, MessageBoxIcon.Information)
                Assistente.limparCampos(Me)
            End Try
        End If
    End Sub
    Sub soLetrasVirgulasEPontosNoKeyDown(ByVal txtbox As KryptonTextBox, ByVal e As System.Windows.Forms.KeyEventArgs)
        Select Case e.KeyCode
            Case Keys.A To Keys.Z, Keys.Escape, Keys.Up, Keys.Down, Keys.Left, _
            Keys.Right, Keys.Back, Keys.Tab, Keys.ControlKey, Keys.ShiftKey, _
            Keys.Menu, Keys.LWin, Keys.RWin, Keys.Home, Keys.End, Keys.Delete, _
            Keys.Insert, Keys.PageDown, Keys.PageUp, Keys.PrintScreen, _
            Keys.NumLock, Keys.CapsLock, Keys.Scroll, Keys.Decimal, _
            Keys.Oemcomma, Keys.OemPeriod    ' ...,
            Case Keys.Enter
                e.SuppressKeyPress = True
                SendKeys.Send("{TAB}")
            Case Else
                e.SuppressKeyPress = True
        End Select
    End Sub

    Sub soNumerosEUMAVirgulaNoKeyDown(ByVal txtbox As KryptonTextBox, ByVal e As System.Windows.Forms.KeyEventArgs)
        Select Case e.KeyCode
            Case Keys.D0 To Keys.D9, Keys.NumPad0 To Keys.NumPad9, Keys.Escape, _
            Keys.Up, Keys.Down, Keys.Left, Keys.Right, Keys.Back, Keys.Tab, _
            Keys.ControlKey, Keys.ShiftKey, Keys.Menu, Keys.LWin, Keys.RWin, _
            Keys.Home, Keys.End, Keys.Delete, Keys.Insert, Keys.PageDown, _
            Keys.PageUp, Keys.PrintScreen, Keys.NumLock, Keys.CapsLock, Keys.Scroll  ' ...,

            Case 110 ' .
                e.SuppressKeyPress = txtbox.Text.Contains(",")
            Case 190 ' .
                e.SuppressKeyPress = txtbox.Text.Contains(".")
            Case 189 ' -
                e.SuppressKeyPress = (txtbox.Text <> Nothing) AndAlso (txtbox.SelectionStart > 0 Or txtbox.Text(0) = "-")
            Case Keys.Enter
                e.SuppressKeyPress = True
                SendKeys.Send("{TAB}")
            Case Else
                e.SuppressKeyPress = True
        End Select

        If e.SuppressKeyPress Then Beep()
    End Sub

    Private Sub txtpreco_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtpreco.KeyDown
        soNumerosEUMAVirgulaNoKeyDown(txtpreco, e)
    End Sub

    Private Sub txtqtdeembalagem_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtqtdeembalagem.KeyDown
        soNumerosEUMAVirgulaNoKeyDown(txtqtdeembalagem, e)
    End Sub

    Private Sub txtestoque_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtestoque.KeyDown
        soNumerosEUMAVirgulaNoKeyDown(txtestoque, e)
    End Sub

    Private Sub txtnome_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtnome.KeyDown

    End Sub

    Private Sub txtdescricao_KeyDown(ByVal sender As System.Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txtdescricao.KeyDown

    End Sub

    Private Sub AtualizarProduto()
        Try

            Dim sql = "UPDATE tblProduto SET nomeProduto = '" & nome & "', codmarcaProduto = " & marca & ", loteProduto = '" & lote & "', descricaoProduto = '" & descricao & "', precoProduto = " & preco & ", quantidadeProduto= " & quantEmbalagem & ", codFornecedor = " & fornecedor & ", quantidadedeestoqueproduto = " & estoque & " WHERE codProduto = " & produto
            Debug.WriteLine(sql)
            conexao.Open()
            command = New OleDbCommand(sql, conexao)
            command.ExecuteNonQuery()

        Catch ex As Exception

            Debug.WriteLine(ex)
        End Try
    End Sub

    
End Class